home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / FWF / Dir / RegExp.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  3KB  |  123 lines

  1. /****************************************************************************
  2.  
  3.     RegExp.c
  4.  
  5.     This file contains the C code for the regular expression
  6.     matching code.
  7.  
  8.     The routines supported act as a more friendly, user level
  9.     interface to the regexp regular expression matching system.
  10.  
  11.  ****************************************************************************/
  12. /*
  13.  * Copyright 1990,1991,1992 Brian Totty
  14.  * 
  15.  * Permission to use, copy, modify, distribute, and sell this software
  16.  * and its documentation for any purpose is hereby granted without fee,
  17.  * provided that the above copyright notice appears in all copies and that
  18.  * both that copyright notice and this permission notice appear in
  19.  * supporting documentation, and that the name of Brian Totty or
  20.  * University of Illinois not be used in advertising or publicity
  21.  * pertaining to distribution of the software without specific, written
  22.  * prior permission.  Brian Totty and University of Illinois make no
  23.  * representations about the suitability of this software for any
  24.  * purpose.  It is provided "as is" without express or implied warranty.
  25.  *
  26.  * Brian Totty and University of Illinois disclaim all warranties with
  27.  * regard to this software, including all implied warranties of
  28.  * merchantability and fitness, in no event shall Brian Totty or
  29.  * University of Illinois be liable for any special, indirect or
  30.  * consequential damages or any damages whatsoever resulting from loss of
  31.  * use, data or profits, whether in an action of contract, negligence or
  32.  * other tortious action, arising out of or in connection with the use or
  33.  * performance of this software.
  34.  *
  35.  * Author:
  36.  *     Brian Totty
  37.  *     Department of Computer Science
  38.  *     University Of Illinois at Urbana-Champaign
  39.  *    1304 West Springfield Avenue
  40.  *     Urbana, IL 61801
  41.  * 
  42.  *     totty@cs.uiuc.edu
  43.  *     
  44.  */ 
  45.  
  46. #include <RegExp.h>
  47. #include <regexp.h>
  48.  
  49. void RegExpCompile(reg_exp,fsm_ptr,fsm_length)
  50. char *reg_exp,*fsm_ptr;
  51. int fsm_length;
  52. {
  53. #ifndef NO_REGEXP
  54.     compile(reg_exp,fsm_ptr,&(fsm_ptr[fsm_length]),'\0');
  55. #endif
  56. } /* End RegExpCompile */
  57.  
  58.  
  59. int RegExpMatch(string,fsm_ptr)
  60. char *string,*fsm_ptr;
  61. {
  62. #ifndef NO_REGEXP
  63.     if (advance(string,fsm_ptr) != 0)
  64.         return(TRUE);
  65.         else
  66.         return(FALSE);
  67. #else
  68.     return(TRUE);
  69. #endif
  70. } /* End RegExpMatch */
  71.  
  72.  
  73. void _RegExpError(val)
  74. int val;
  75. {
  76.     fprintf(stderr,"Regular Expression Error %d\n",val);
  77.     exit(-1);
  78. } /* End _RegExpError */
  79.  
  80.  
  81. void RegExpPatternToRegExp(pattern,reg_exp)
  82. char *pattern,*reg_exp;
  83. {
  84.     int in_bracket;
  85.  
  86.     in_bracket = 0;
  87.     while (*pattern != '\0')
  88.     {
  89.         if (in_bracket)
  90.         {
  91.             if (*pattern == ']') in_bracket = 0;
  92.             *reg_exp++ = *pattern++;
  93.         }
  94.             else
  95.         {
  96.             switch (*pattern)
  97.             {
  98.                 case '[':
  99.                 in_bracket = 1;
  100.                 *reg_exp++ = '[';
  101.                 break;
  102.                 case '?':
  103.                 *reg_exp++ = '.';
  104.                 break;
  105.                 case '*':
  106.                 *reg_exp++ = '.';
  107.                 *reg_exp++ = '*';
  108.                 break;
  109.                 case '.':
  110.                 *reg_exp++ = '\\';
  111.                 *reg_exp++ = '.';
  112.                 break;
  113.                 default:
  114.                 *reg_exp++ = *pattern;
  115.                 break;
  116.             }
  117.             ++ pattern;
  118.         }
  119.     }
  120.     *reg_exp++ = '$';
  121.     *reg_exp++ = '\0';
  122. } /* End RegExpPatternToRegExp */
  123.